/*
 * @Author: 郑子胜(Zechariahzheng)
 * @Date: 2023-11-13 09:35:12
 * @LastEditors: 郑子胜(Zechariahzheng)
 * @LastEditTime: 2023-12-17 15:50:04
 * @Descripttion: 
 */
#ifndef MY_SERVO_H__
#define MY_SERVO_H__
#include <Arduino.h>
#include <Servo.h>

// #define DEBUG 1

#ifdef DEBUG
  #define SERVO_DEBUG_PRINT(x)  Serial.print (x)
  #define SERVO_DEBUG_PRINTLN(x) Serial.println (x)
#else
  #define SERVO_DEBUG_PRINT(x)
  #define SERVO_DEBUG_PRINTLN(x)
#endif

struct MyServoInfo {
  int pin;                    // 电机引脚
  char *onSwitch;             // 开机标志位
  char *onWeek;               // 每周开机执行时间
  char *onExecuteTime;        // 每天开机执行时间
  char *onPushDepth;          // 开机按下深度
  char *onLastTime;           // 开机按下持续时间
  char *offSwitch;            // 关机标志位
  char *offWeek;              // 每周关机执行时间
  char *offExecuteTime;       // 每天关机执行时间
  char *offPushDepth;         // 关机按下深度
  char *offLastTime;          // 关机按下持续时间
  MyServoInfo(int p, char *a, char *b, char *c, char *d, 
    char *e, char *f, char *g, char *h, char *i, char *j): pin(p), onSwitch(a), onWeek(b), 
    onExecuteTime(c), onPushDepth(d), onLastTime(e), offSwitch(f), offWeek(g), offExecuteTime(h), offPushDepth(i), offLastTime(j) {};
};

/*
week/executeTime/pushDepth：指向全局变量，全局变量会被mqtt的callback修改，不需要这里来设置
*/
class MyServo {
private:
  Servo *servo;
  const MyServoInfo *info;

public:
  void init(const MyServoInfo *info);

  // nowTime格式：星期 时间   如：1 20:00:00
  void loop(String nowTime);

  void toDoNow(const char *puhDepth, const char *lastTime) const;

  ~MyServo();
};

#endif